#Boa:Dialog:Dialog1

import wx
import utiles
import consultasBD
from decimal import Decimal

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1BUTTON4, wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, 
 wxID_DIALOG1STATICTEXT3, wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT5, 
 wxID_DIALOG1STATICTEXT6, wxID_DIALOG1STATICTEXT7, wxID_DIALOG1STATICTEXT8, 
 wxID_DIALOG1STATICTEXT9, wxID_DIALOG1TEXTCTRL1, wxID_DIALOG1TEXTCTRL10, 
 wxID_DIALOG1TEXTCTRL2, wxID_DIALOG1TEXTCTRL3, wxID_DIALOG1TEXTCTRL4, 
 wxID_DIALOG1TEXTCTRL5, wxID_DIALOG1TEXTCTRL6, wxID_DIALOG1TEXTCTRL7, 
 wxID_DIALOG1TEXTCTRL8, wxID_DIALOG1TEXTCTRL9, 
] = [wx.NewId() for _init_ctrls in range(24)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(680, 185), size=wx.Size(400, 388),
              style=wx.DEFAULT_DIALOG_STYLE, title='Borrar Cheque')
        self.SetClientSize(wx.Size(392, 361))

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Nro. de Cheque', name='staticText1', parent=self,
              pos=wx.Point(16, 8), size=wx.Size(76, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL1, name='textCtrl1',
              parent=self, pos=wx.Point(16, 24), size=wx.Size(104, 21), style=0,
              value='')

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Buscar',
              name='button1', parent=self, pos=wx.Point(128, 24),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscar, id=wxID_DIALOG1BUTTON1)

        self.button4 = wx.Button(id=wxID_DIALOG1BUTTON4, label='Limpiar',
              name='button4', parent=self, pos=wx.Point(208, 24),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_DIALOG1BUTTON4)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2, label='id',
              name='staticText2', parent=self, pos=wx.Point(360, 8),
              size=wx.Size(8, 13), style=0)
        self.staticText2.Show(False)

        self.textCtrl2 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL2, name='textCtrl2',
              parent=self, pos=wx.Point(360, 24), size=wx.Size(16, 21), style=0,
              value='')
        self.textCtrl2.Show(False)
        self.textCtrl2.SetEditable(False)

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='Banco', name='staticText3', parent=self, pos=wx.Point(16,
              64), size=wx.Size(29, 13), style=0)

        self.textCtrl3 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL3, name='textCtrl3',
              parent=self, pos=wx.Point(16, 80), size=wx.Size(48, 21), style=0,
              value='')
        self.textCtrl3.SetEditable(False)

        self.textCtrl4 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL4, name='textCtrl4',
              parent=self, pos=wx.Point(64, 80), size=wx.Size(320, 21), style=0,
              value='')
        self.textCtrl4.SetEditable(False)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='Fecha Emision', name='staticText4', parent=self,
              pos=wx.Point(16, 104), size=wx.Size(67, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label='Fecha Pago', name='staticText5', parent=self,
              pos=wx.Point(120, 104), size=wx.Size(56, 13), style=0)

        self.textCtrl5 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL5, name='textCtrl5',
              parent=self, pos=wx.Point(16, 120), size=wx.Size(100, 21),
              style=0, value='')
        self.textCtrl5.SetEditable(False)

        self.textCtrl6 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL6, name='textCtrl6',
              parent=self, pos=wx.Point(120, 120), size=wx.Size(100, 21),
              style=0, value='')
        self.textCtrl6.SetEditable(False)

        self.staticText6 = wx.StaticText(id=wxID_DIALOG1STATICTEXT6,
              label='Importe', name='staticText6', parent=self, pos=wx.Point(16,
              144), size=wx.Size(38, 13), style=0)

        self.textCtrl7 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL7, name='textCtrl7',
              parent=self, pos=wx.Point(16, 160), size=wx.Size(100, 21),
              style=0, value='')
        self.textCtrl7.SetEditable(False)

        self.staticText7 = wx.StaticText(id=wxID_DIALOG1STATICTEXT7,
              label='Destinatario', name='staticText7', parent=self,
              pos=wx.Point(16, 184), size=wx.Size(58, 13), style=0)

        self.textCtrl8 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL8, name='textCtrl8',
              parent=self, pos=wx.Point(16, 200), size=wx.Size(368, 21),
              style=0, value='')
        self.textCtrl8.SetEditable(False)

        self.staticText8 = wx.StaticText(id=wxID_DIALOG1STATICTEXT8,
              label='Observaciones', name='staticText8', parent=self,
              pos=wx.Point(16, 224), size=wx.Size(71, 13), style=0)

        self.textCtrl9 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL9, name='textCtrl9',
              parent=self, pos=wx.Point(16, 240), size=wx.Size(368, 24),
              style=0, value='')
        self.textCtrl9.SetEditable(False)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Procesar',
              name='button2', parent=self, pos=wx.Point(16, 328),
              size=wx.Size(75, 23), style=0)
        self.button2.Enable(False)
        self.button2.Bind(wx.EVT_BUTTON, self.OnProcesar,
              id=wxID_DIALOG1BUTTON2)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Salir',
              name='button3', parent=self, pos=wx.Point(304, 328),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON3)

        self.staticText9 = wx.StaticText(id=wxID_DIALOG1STATICTEXT9,
              label='Motivo del borrado', name='staticText9', parent=self,
              pos=wx.Point(16, 272), size=wx.Size(90, 13), style=0)

        self.textCtrl10 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL10,
              name='textCtrl10', parent=self, pos=wx.Point(16, 288),
              size=wx.Size(368, 21), style=0, value='')
        self.textCtrl10.SetMaxLength(60)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def OnSalir(self, event):
        self.Close()

    def OnBuscar(self, event):
        nrocheque = self.textCtrl1.GetLabel() == ""
        idcheque = self.textCtrl2.GetLabel() == ""
        if not nrocheque and not idcheque:
            return
        self.OnLimpiar(None)
        self.textCtrl1.SetEditable(False)
        if nrocheque:
            texto1 = "Debe ingresar un Nro.de Cheque valido"
            utiles.mensaje(None,texto1)
            self.textCtrl1.SetFocus()
            self.textCtrl1.SetEditable(True)
            return
        nrocheque = self.textCtrl1.GetLabel()

        #verifica que el cheque haya sido utilizado en pagos a proveedores
        sql = "SELECT * FROM comprasaldos WHERE idoperacion LIKE '%CHEQUES "+nrocheque+"%' "
        resultado = consultasBD.ordenCrudaDict(sql)
        if len(resultado) != 1 or resultado == None or resultado == ():
            a1 = "Cheque no utilizado para pago a proveedores\n"
            a2 = "No se encuentra informacion en Saldo de Proveedores"
            texto = a1 + a2
            utiles.mensaje(None,texto)
            self.textCtrl1.SetFocus()
            self.textCtrl1.SetEditable(True)
            return

        #buscamos datos del cheque a borrar
        r1 = "SELECT ce.id,ce.codbanco,ce.nrocheque,ce.fechaemision,ce.fechapago, \n"
        r2 = "       ce.importe,ce.destinatario,ce.observaciones,b.nombre \n"
        r3 = "FROM chq_emitidos ce, chq_bancos b \n"
        r4 = "WHERE ce.nrocheque = '"+self.textCtrl1.GetLabel()+"' \n"
        r5 = "      AND b.codbanco = ce.codbanco AND ce.acreditado = '0' "
        sql = r1+r2+r3+r4+r5
        resultado = consultasBD.ordenCrudaDict(sql)
        if resultado == None or resultado == ():
            utiles.mensaje(None,"Cheque no encontrado o ya acreditado")
            self.textCtrl1.SetFocus()
            self.textCtrl1.SetEditable(True)
            return
        if len(resultado) != 1:
            utiles.mensaje(None,"Error buscando el Nro. de Cheque")
            self.textCtrl1.SetFocus()
            self.textCtrl1.SetEditable(True)
            return

        cheque = resultado[0]
   
        id = str(cheque["id"])
        codbanco = str(cheque["codbanco"])
        nrocheque = str(cheque["nrocheque"])
        fechaemision = str(cheque["fechaemision"])
        fechapago = str(cheque["fechapago"])
        importe = str(cheque["importe"])
        destinatario = str(cheque["destinatario"])
        observaciones = str(cheque["observaciones"])
        nombrebanco = str(cheque["nombre"])
        
        self.textCtrl2.SetLabel(id)
        self.textCtrl3.SetLabel(codbanco)
        self.textCtrl4.SetLabel(nombrebanco)
        self.textCtrl5.SetLabel(fechaemision)
        self.textCtrl6.SetLabel(fechapago)
        self.textCtrl7.SetLabel(importe)
        self.textCtrl8.SetLabel(destinatario)
        self.textCtrl9.SetLabel(observaciones)
        
        self.textCtrl10.SetFocus()
        self.button2.Enable(True)

    def OnLimpiar(self, event):
        self.textCtrl2.SetLabel("")
        self.textCtrl3.SetLabel("")
        self.textCtrl4.SetLabel("")
        self.textCtrl5.SetLabel("")
        self.textCtrl6.SetLabel("")
        self.textCtrl7.SetLabel("")
        self.textCtrl8.SetLabel("")
        self.textCtrl9.SetLabel("")
        self.textCtrl10.SetLabel("")
        self.textCtrl1.SetEditable(True)
        self.textCtrl1.SetFocus()
        self.button2.Enable(False)

    def OnProcesar(self, event):
        if self.textCtrl10.GetLabel() == "":
            utiles.mensaje(None,"Debe especificar un motivo")
            self.textCtrl10.SetFocus()
            return
        nrocheque = self.textCtrl1.GetLabel()
        r1 = "SELECT * FROM chq_borrados WHERE nrocheque = '"+nrocheque+"' "
        r2 = "AND borrado = '0'"
        sql = r1+r2
        resultado = consultasBD.ordenCruda(sql)
        encontrado = False
        if not(resultado == None or resultado == () or len(resultado) == 0):
            encontrado = True
        if encontrado:
            texto1 = "Atencion: este cheque esta pendiente de \n"
            texto2 = "aprobar su borrado. No se puede procesar."
            texto = texto1 + texto2
            utiles.mensaje(None,texto)
            self.OnLimpiar()
            return
        print "Borrando Cheque --> pendiente de aprobar"
        
        id = self.textCtrl2.GetLabel()
        codbanco = self.textCtrl3.GetLabel()
        nrocheque = self.textCtrl1.GetLabel()
        fechaemision = self.textCtrl5.GetLabel()
        fechapago = self.textCtrl6.GetLabel()
        importe = self.textCtrl7.GetLabel()
        destinatario = self.textCtrl8.GetLabel()
        observaciones = self.textCtrl9.GetLabel()
        motivoborrado = self.textCtrl10.GetLabel()
        
        r1 = "INSERT INTO chq_borrados(id_original,codbanco,nrocheque,fechaemision, \n"
        r2 = "       fechapago,importe,destinatario,observaciones,motivo) \n"
        r3 = "VALUES('"+id+"','"+codbanco+"','"+nrocheque+"','"+fechaemision+"',\n"
        r4 = "       '"+fechapago+"','"+importe+"','"+destinatario+"',\n"
        r5 = "       '"+observaciones+"','"+motivoborrado+"')"
        sql = r1+r2+r3+r4+r5

        try:
            consultasBD.begin()
            consultasBD.executaSinCommit(None, sql)
            consultasBD.commit()
            utiles.mensaje(None,"Cheque marcado.\nAhora debe aprobarse el borrado")
        except:
            consultasBD.rollback()
            utiles.mensaje(None,"Error al intentar borrar el cheque")
        
        self.textCtrl1.SetLabel("")
        self.OnLimpiar(None)
        
        
